<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>
<body>
    <script>
        // function aaa(name2){
        //     console.log("aaa中的this",this); 
        //     this.name = name2;
        // }

        // // aaa(); //window.aaa() this=>window

        // var str = "122";
        // // aaa.call(str) ; // this=>str

        // function bbb(name1){
        //     console.log("bbb中的this",this); //b  
        //     // aaa(); // this=>window

        //     // aaa.call(str)
        //     // 在函数bbb中调用函数aaa 将aaa中的this更改为函数bbb中的this
        //     aaa.call(this,name1)
        // }
        // var b = new bbb("lili");
        // console.log("b:",b); //

        // var b2 = new bbb();
        // console.log("b2:",b2); //

        // function Aa(name){
        //     // console.log("this:",this); //b
        //     this.name= name;
        // } 
        // Aa.prototype.run = function(){
        //     console.log("Aa中的run函数被调用了");
        // }
        // function Bb(name1){
        //     // 作为普通函数调用, window.Aa(name1); 这样函数a中的this就指向window  
        //     Aa(name1);
        //     // 希望Aa中的this指向 Bb当中的this
        //     // 在调用函数Aa时,更改函数内this的指向为当前构造函数所创建的实例对象this;
        //     Aa.call(this,name1); //构造函数bb继承了构造函数aa
        // }  
        // var b = new Bb("lili");
        // console.log(b); //Bb {name: 'lili'}
        // Bb.prototype.num = 100;
        
        // Object.create()创建对象
        // 如果加了参数是一个对象 会将这个对象进行深复制 返回一个新对象
        Bb.prototype = Object.create(Aa.prototype);  //构造函数bb的原型继承了构造函数aa的原型
        // constructor表示创建当前对象的构造函数
        Bb.prototype.constructor = Bb;

        Bb.prototype.test = function(){
            console.log("Bb中的test函数");
        }

        // var b = new Bb("lili");
        // console.log(b); //{}
        // 类就是构造函数的另一个名称
        // 原型链
        // 会现在自身查找,没有就找bb的原型对象,没有再找bb的父类(父构造函数)的原型...找到null或找到为止
        // b.run();
        // console.log(b.num);
        
       
    </script>
</body>
</html>